package com.ytjj.qmyx.mall.model.response;

import com.ytjj.qmyx.mall.constants.IsActivityConstant;
import com.ytjj.qmyx.mall.model.*;
import com.ytjj.qmyx.mall.model.vo.DynamicVO;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 商品响应实体
 *
 *
 * @version 1.0
 *
 */
@Data
@Accessors(chain = true)
public class ProductResponse implements Serializable {

    /**
     * 主键
     *
     */
    private Integer id;

    /**
     * 商品标识
     *
     */
    private String productNo;

    /**
     * 商品售价得20%-30%随机
     */
    private BigDecimal selling;

    private PageButton pageButton;

    /**
     * 商品名称
     *
     */
    private String productName;


    /**
     * 商品白图
     *
     */
    private String productImg;

    /**
     * 场景图
     *
     */
    private String sceneImg;

    /**
     * 缩列图
     *
     */
    private String shrinkImg;

    /**
     * 默认价格
     *
     */
    private BigDecimal price;

    /**
     * 描述
     *
     */
    private String descr;

    /**
     * 长标题
     */
    private String longTitle;

    /**
     * 排序
     *
     */
    private Integer sort;

    /**
     * 原价
     *
     */
    private BigDecimal originalPrice;

    /**
     * 库存总量
     *
     */
    private Integer stock;

    /**
     * 库存剩余进度条
     */
    private Integer stockProgress;

    /**
     * 评论总数
     *
     */
    private Integer commentSum;

    /**
     * 好评率
     *
     */
    private Integer goodRatio;

    /**
     * 好评率（有小数）
     */
    private String productRatio;

    /**
     * 分类id
     *
     */
    private Integer categoryId;

    /**
     * 店家id
     *
     */
    private Integer bankerId;

    /**
     * 销量
     */
    private Integer volume;

    /**
     * 销量字段
     */
    private String volumeStr;
    /**
     * 货源
     *
     * @mbg.generated
     */
    private String warehouse;

    /**
     * 货源名称
     *
     * @mbg.generated
     */
    private String warehouseName;

    /**
     * 仓库规则如：不退换不到付
     *
     * @mbg.generated
     */
    private String warehouseRule;

    /**
     * sku属性json列表
     *
     */
    private String attributeJson;

    /**
     * 规格列表
     */
    private String skuSpec;

    /**
     * 是否收藏标志
     */
    private Integer isCollect;

    /**
     * 图片列表
     */
    private Map<String,List<ProductImg>> imgMapList;

    /**
     * 是否为活动
     *
     * 备注：该字段用于给前端分辨是否为活动商品
     */
    private Integer isActivity;


    /**
     * 用户ID
     */
    private Integer userId;

    /**
     * 推荐图片列表
     */
    private List<ProductImg> recommendImgList;

    /**
     * 假用户列表
     */
    List<UsersFake> usersFakeList;

    private String recommendDoc;

    /**
     * 是否存在推荐图或视频 0否 1是
     */
    private Integer recImgFlag;

    private Long similaritySum;

    private String recDescr;

    /**
     * 现价
     */
    private BigDecimal curPrice;

    /**
     * 活动标识1
     */
    private BigDecimal activityMax;

    /**
     * 活动标识2
     */
    private BigDecimal activityMin;

    /**
     * 规格列表
     */
    private Map<String,ProductSpecResponse> specMap;


    private String extra;


    /**
     * 活动类型（“”：普通商品，or：活动商品）
     */
    private String activityType;

    /**
     * 商品类型(1:普通商品（包含优质测评商品）2：活动商品)
     */
    private Integer productType;

    /**
     * 现金劵图片
     */
    private String cashCouponImg;

    /**
     * 区分50和100现金劵 类型
     *
     * @param productActivity
     */
    private String cashType;


    private BigDecimal preferentialPrice;

    /**
     * 拍卖
     */
    private List<AuctionResponse> auctionList;

    /**
     * 提示语
     */
    private String advertTips;

    /**
     * 是否隐藏
     * @mbg.generated
     */
    private Integer isHide;

    /**
     * 是否是广告
     */
    private Integer isAdvert;

    /**
     * 该商品店铺推荐数量
     */
    private List<ProductResponse> recommend;

    /**
     * 该店铺的商品数量
     */
    private Integer productNum;

    /**
     * 该店铺关注数
     */
    private Integer followNum;

    private String brandStory;

    /**
     * 是否放假
     */
    private Integer isHoliday;

    /**
     * 店铺标题
     */
    private String title;

    /**
     * 店铺Logo
     */
    private String logo;


    /**
     * 假用户集合
     */
    private List<UsersFake> fakeUserList;

    /**
     * 补贴价
     * 为以旧换新新增的补贴价：subsidy = originalPrice - Price
     */
    private BigDecimal subsidy;

    /**
     * 栏目id
     *
     */
    private Integer columnId;

    /**
     * 是否是0元购
     */
    private Integer isZeroProduct;

    /**
     * 限时限量/7天无理由退换/顺丰包邮
     */
    private String tips;

    /**
     * 是否领取
     */
    private Integer isReceive = 1;

    /**
     * 过期时间
     */
    private Date overdueTime;

    /**
     * 官网栏目id
     *
     * @mbg.generated
     */
    private Integer bankerColumnId;

    /**
     * 评论
     */
    private List<ProductReviews> reviews;

    /**
     * 是否领取补贴
     */
    private Integer isReceiveSubsidy;

    /**
     * 领取总额
     */
    private BigDecimal totalReceive;

    /**
     * 用户领取的红包余额
     */
    private BigDecimal userActivityMax;

    /**
     * 假用户头像
     **/
    private List<String> usersFake;

    /**
     * 假用户评论
     **/
    List<ProductReviewsResponse> productReviewsResponses;

    /**
     * 是否是免费商品
     */
    private Integer isFreeProduct;

    private Integer num;

    /**商品售价：20%—30%随机数 **/
    private String shouJia;

    /**
     * 品牌id
     *
     * @mbg.generated
     */
    private Integer brandId;

    /**
     * 品牌
     *
     * @mbg.generated
     */
    private String brand;

    /**
     * 推荐的其他店铺的商品
     **/
    private List<ProductResponse> recommendOther;

    /**
     * 该商品对应的测评商品动态信息
     */
    private List<Dynamic> dynamicList;

    /**
     * 该商品对应的测评商品动态信息
     */
    private List<DynamicVO> dynamicVOSList;

    /**
     * 喜欢商品推荐
     */
    private List<Product> likeList;

    /**
     * 助力数
     *
     * @mbg.generated
     */
    private Integer helpNum;

    /**
     * 产品状态：1 上架 2 下架  3 已删除 4 待上架 5 打回
     *
     * @mbg.generated
     */
    private Byte status;
    /**
     * 活动主图
     */
    private String activityMainImg;

    /**
    * 专题Id
    *
    */
    private Integer subjectId;

    /**
     * 所属测评类型
     * 1-普通 2-专享
     */
    private Integer appraisalType;

    /**
     * 虚拟库存( h5销售渠道使用)
     */
    private Integer virtualStock;

    /**
     * 商品视频
     *
     * @mbg.generated
     */
    private String productVideo;

    /**
     * 商品视频主图
     *
     * @mbg.generated
     */
    private String productVideoCover;

    /**
     * 不可下单标志
     * 根据地区判断
     * true-不可下单  false-可下单
     */
    private boolean disableFlag;
    /** 总榜单排行 */
    private long totalRank;
    /** 分类排行 */
    private long categoryRank;
    /**  一级分类id */
    private Integer topCategoryId;
    /** 三级分类id */
    private Integer bottomCategoryId;
    /** 前端分类名称 */
    private String frontCategoryName;
    /**
     * 供应链表商品id
     *
     * @mbg.generated
     */
    private Integer supplyProductId;


    public ProductResponse(){}

    public ProductResponse(Product product){
        BeanUtils.copyProperties(product,this);
        this.recImgFlag = 0;
        this.isActivity = IsActivityConstant.NO;
        this.price = new BigDecimal(price.stripTrailingZeros().toPlainString());
        this.originalPrice = new BigDecimal(originalPrice.stripTrailingZeros().toPlainString());
    }

    public ProductResponse(Product product,List<UsersFake> usersFakes){
        this(product);
        this.fakeUserList = usersFakes;
        this.recImgFlag = 0;
        this.price = new BigDecimal(price.stripTrailingZeros().toPlainString());
        this.originalPrice = new BigDecimal(originalPrice.stripTrailingZeros().toPlainString());
    }

}
